PICターゲット・ボードのチェック編 その1
(LEDを点灯させる)

LEDを点灯させてボードをチェックしてみよう!

<項目>RBポート:全LED点灯動作
RBポートの全LED点灯動作については、これまで述べてきました。以下にプログラムリストを示します。
(注)以下に示すプログラムには、ホームページ画面作成の都合上、空白として全角文字のスペースなどが挿入されています。したがって、下記プログラムリストをそのままコピーしてMPLABのソースファイルとされた場合には、エラーとなることがあります。

→ここをクリックして、下記のプログラムをダウンロードするようにしてください。
 <ダウンロードする> ファイル名:「port_b.asm」 サイズ543バイト

→ここをクリックして、下記のオブジェクトファイルをダウンロードするようにしてください。
 <ダウンロードする>ファイル名:「port_b.hex」 サイズ46バイト

;*****************************************************
; Port B 動作チェックプログラム
; Port B の発光ダイオードを点灯させる
;*****************************************************
  LIST   P=PIC16F877
  INCLUDE  P16F877.INC

  ORG    0
  BSF    STATUS,RP0
  CLRF   TRISB
  BCF    STATUS,RP0
  MOVLW   0FFH
  MOVWF   PORTB
  END

;(1)プロセッサの種別指定
;(2)インクルードファイルの指定
;
;(3)プログラムの開始番地の指定
;(4)Bank 1 へ切替
;(5)PortB 全ポートを出力に設定
;(6)Bank 0 へ戻す
;(7)11111111を Wreg にロードする
;(8)PORTBへWregのデータを出力
;(9)終了

【プログラムの説明】ここがポイント
このプログラムについて、順を追って解説を加えておきましょう。

(1)プロセッサの種別指定
定義の仕方は「PROCESSOR」か「LIST」命令を使って設定します。ここで指定するプロセッサ名称は、パッケージの種類を示すサフィックス(最後の英記号の部分)は不要です。

   LIST  P=PIC16F877
    または
   PROCESSOR  PIC16F877

(2)標準ヘッダーファイルのインクルード
標準ヘッダーファイルとは、各プロセッサが持っているSFR(Special Function Register)をラベル(記号)で使える様にするため、ラベルとハードウェアの場所とを定義しているファイルです。標準ヘッダーファイルは 「プロセッサ名.INC」というファイル名で統一されて、MPLABのディレクトリに格納されています。従って、これのインクルード方法は下記のようにして行います。
一度、参考までに標準ヘッダーファイルの内容をエディタ等で見ておくことをお勧めします。

   INCLUDE    P16F877.INC
    または
   #INCLUDE   P16F877.INC

(3)プログラムの開始番地の指定
「ORG」はプログラムの開始番地を指定する擬似命令で、ORG以下の実際のプログラム命令が格納されるプログラムメモリ内の位置(アドレス)を指定します。今回はひとつのプログラムから構成されているので最初に1回だけ指定すれば良いことになります。

   ORG  0  ;0番地から格納することを示します。

コンピュータは一般に電源投入時やリセットをすると必ず0番地からスタートするようになっているので、0番地には必ず命令があることが必要です。

(4)Bank 1 へ切替
PICには各種の動作モードを設定するための Special Register と呼ばれるものが用意されています。PICを動作させるためには、まずこのSpecial Registerの設定から始めます。そしてそれらは全て、Register File と呼ぶメモリとして用意されています。その Register Fileは Bank0, Bank1, Bank2, Bank3 とよばれるアドレス空間をもっているため、多少アクセスの仕方が面倒です。つまりRESET後の通常はBank0となっているので、Bank1側のレジスタにアクセスするときはBankの切替えをしてからとなります。またBank0とBank1に同じ物があるときにはどちらでも同じ様に使えます。
Bank1へ切り替える方法ですが、「STATUS」レジスタにある2ビットのRP0、RP1を変えてBankを指定します。デフォルトは、Bank0です。表1にBankとRP1,RP0ビットとの関係を示します。Bank1へ切り替えるためには、RP0ビットを「1」にします。(RP1はデフォルトで「0」なので変える必要はない。)

 BSF    STATUS,RP0
「STATUS」レジスタのRP0ビットを「1」にする。

表1.BankとRP1,RP0ビットとの関係
Bank RP1 RP0


(5)PortB 全ポートを出力に設定
PIC16F877には、I/Oポートが5組用意されています。入出力モードの設定は、それぞれのI/Oポートのピン1本1本を独立して入力か出力かプログラムで決めることができ、TRISA, TRISB, TRISC, TRISD, TRISE という特別なレジスタ(SRF)に設定します。このTRISxレジスタの各ビットが、対応する各ポートPORTxの同じ位置のビットの入出力モードを決定します。PORTxのビットを出力に設定する時には、TRISxの対応するビットを「0」に設定します。入力に設定する時には、「1」に設定しますが、電源ON後やRESET後はすべて「入力」として設定されています。
それでは、PortBの全ポートを出力に設定します。Bank1にあるTRISBレジスタを変更して出力に設定します。TRISBレジスタは、CLRF(fレジスタをゼロクリアする命令)で出力設定となります。

 CLRF   TRISB
「TRISBレジスタをゼロクリアする。すなわち、PORTB全ポートを出力に設定する」

(6)Bank 0 へ戻す
動作モードの設定後は、Bank0に戻しておきます。Bank1へ切り替えるためには、RP0ビットを「0」にします。(RP1はデフォルトで「0」なので変える必要はない。)

BCF    STATUS,RP0
「STATUS」レジスタのRP0ビットを「0」にする。すなわち、Bank0に戻す。」

(7)11111111を Wreg にロード
全ポートを「High」出力するため、11111111を (すなわち16進表示で、FF)を、Wregにロードする。

MOVLW  0FFH
「11111111をWregにロードする」

(注)数値の書式ですが、16進数表示は数字の後ろにHをつけます。
    (例)9FH
ただし、16進数の先頭文字が、A,B,C,D,E,Fの場合は、先頭に0を付けないと、MPLABのBuildでエラーになります。先頭文字が1〜9のときはOK
    (例) × B9H → ○ 0B9H とする
    (例) ○ 54H
その他の書式としては、
    (例) H’9F’ H’9f’ 0xA9 0xFB
という書式も使えます。表2は数値の書式についてまとめています。

表2.数値の書式
種類 書式 使用例
10進数 D'<digits>' D'169'
16進数 H'<hex_digits>'
0x<hex_digits>
0<hex_digits>H
H'A9'
0xA9
0A9H
8進数 O'<octal_digits>' O'367'
2進数 B'<binary_digits>' B'00011001'
ASCII '<character>'
A'<characters>'
'F'
A'F'



(8)PORTへWregのデータを出力
実際に出力するには、MOVWFなどの転送命令や、BSFなどのビット操作命令を使います。

MOVWF  PORTB
「PORTBへWregのデータを出力する」

(9)終了
「END」はソースの終わりを示す必ず必要な擬似命令で、アセンブラに対し、ここがソースの終わりであることを知らせる役割があります。

   END
「ソースプログラムの終わりであることを示す。」


<ソースコード書き方の注意>
ソースコードの書式は、下記に示す基本フォーマットで書きます。

  Label  Mnemonic  Operand  Comment

Label :(目印用の名前)
Labelは、各行の先頭から始めます。
含まれる文字は、アルファベットかアンダーバー(_)で始まる英数字でなければなりません。Labelは32文字以下の長さまでで、大文字、小文字の区別があります。ただし、大小文字の区別はMPLABの環境設定で無くすこともできます。

Mnemonic:(命令そのものの記号)
アセンブラー命令と指示命令(擬似命令)は、行の先頭から1個以上のスペースが必要です。Labelがある場合は、Labelの次に1個以上のスペースかコロン(:)が必要です。

Operand:(命令の対象、アドレスなど)
OperandはMnemonicの次に1個以上のスペースかタブで分離します。
複数のOperandが必要な場合には「,」で分離します。

Comment:(メモ欄)
Commentはどこから始まってもよく、セミコロン(;)に続く文節は全てコメントとされます。
アセンブルではコメントは無視され、オブジェクトには何も出力されません。

1行は255文字以下で、それぞれの項は1個以上のスペースで分離します。また、1行に複数のフォーマットを「,」で区切って書けます。



<項目>RCポート:全LED点灯動作
RCポートの全LED点灯動作については、RBポートで使用したプログラムの一部を書き換えすることで対応できます。
ポートの設定では、
 CLRF   TRISB         ;(5)PortB 全ポートを出力に設定
となっていた箇所を
 CLRF   TRISC         ;(5)PortC 全ポートを出力に設定
として、RCポートに設定します。

また、出力データを
 MOVWF  PORTB        ;(8)PORTBへWregのデータを出力
となっていた箇所を
 MOVWF  PORTC        ;(8)PORTCへWregのデータを出力
とするだけです。

RCポート:全LED点灯動作プログラムについて

→ここをクリックして、下記のプログラムをダウンロードするようにしてください。
 <ダウンロードする> ファイル名:「port_c.asm」 サイズ543バイト

→ここをクリックして、下記のオブジェクトファイルをダウンロードするようにしてください。
 <ダウンロードする> ファイル名:「port_c.hex」 サイズ46バイト

;*****************************************************
; Port C動作チェックプログラム
; Port Cの発光ダイオードを点灯させる
;*****************************************************
  LIST   P=PIC16F877
  INCLUDE  P16F877.INC

  ORG    0
  BSF    STATUS,RP0
  CLRF   TRISC
  BCF    STATUS,RP0
  MOVLW   0FFH
  MOVWF   PORTC
  END

;(1)プロセッサの種別指定
;(2)インクルードファイルの指定
;
;(3)プログラムの開始番地の指定
;(4)Bank 1 へ切替
;(5)PortC 全ポートを出力に設定
;(6)Bank 0 へ戻す
;(7)11111111を Wreg にロードする
;(8)PORTCへWregのデータを出力
;(9)終了



<項目>RDポート:全LED点灯動作
RDポートの全LED点灯動作については、RBポートで使用したプログラムの一部を書き換えすることで対応できます。
ポートの設定では、
 CLRF   TRISB         ;(5)PortB 全ポートを出力に設定
となっていた箇所を
 CLRF   TRISD         ;(5)PortD 全ポートを出力に設定
として、RDポートに設定します。

また、出力データを
 MOVWF  PORTB        ;(8)PORTBへWregのデータを出力
となっていた箇所を
 MOVWF  PORTD        ;(8)PORTDへWregのデータを出力
とするだけです。

RDポート:全LED点灯動作プログラムについて

→ここをクリックして、下記のプログラムをダウンロードするようにしてください。
 <ダウンロードする> ファイル名:「port_d.asm」 サイズ543バイト

→ここをクリックして、下記のオブジェクトファイルをダウンロードするようにしてください。
 <ダウンロードする> ファイル名:「port_d.hex」 サイズ46バイト

;*****************************************************
; Port D動作チェックプログラム
; Port Dの発光ダイオードを点灯させる
;*****************************************************
  LIST   P=PIC16F877
  INCLUDE  P16F877.INC

  ORG    0
  BSF    STATUS,RP0
  CLRF   TRISD
  BCF    STATUS,RP0
  MOVLW   0FFH
  MOVWF   PORTD
  END

;(1)プロセッサの種別指定
;(2)インクルードファイルの指定
;
;(3)プログラムの開始番地の指定
;(4)Bank 1 へ切替
;(5)PortD 全ポートを出力に設定
;(6)Bank 0 へ戻す
;(7)11111111を Wreg にロードする
;(8)PORTDへWregのデータを出力
;(9)終了



<項目>REポート:全LED点灯動作
REポートの全LED点灯動作については、RBポートで使用したプログラムの一部を書き換えすることで対応できます。
ポートの設定では、
 CLRF   TRISB         ;(5)PortB 全ポートを出力に設定
となっていた箇所を
 CLRF   TRISE         ;(5)PortE 全ポートを出力に設定
として、REポートに設定します。

また、出力データを
 MOVWF  PORTB        ;(8)PORTBへWregのデータを出力
となっていた箇所を
 MOVWF  PORTE        ;(8)PORTEへWregのデータを出力
とするだけです。

ただしREポートのピン数は、RE0,RE1,RE2ピンの3ピンのみです。
したがって、
 MOVLW  0FFH         ;(7)11111111を Wreg にロードする
となっていた箇所を
 MOVLW  07H          ;(7)00000111を Wreg にロードする
と変更します。
(注)0FFHのままで変更しなくても、MPLABはエラーにはなりませんし、RE0〜2ピンのLEDが点灯します。

REポート:全LED点灯動作プログラムについて

→ここをクリックして、下記のプログラムをダウンロードするようにしてください。
<ダウンロードする>  ファイル名:「port_e.asm」 サイズ542バイト

→ここをクリックして、下記のオブジェクトファイルをダウンロードするようにしてください。
<ダウンロードする> ファイル名:「port_e.hex」 サイズ46バイト

;*****************************************************
; Port E動作チェックプログラム
; Port Eの発光ダイオードを点灯させる
;*****************************************************
  LIST   P=PIC16F877
  INCLUDE  P16F877.INC

  ORG    0
  BSF    STATUS,RP0
  CLRF   TRISE
  BCF    STATUS,RP0
  MOVLW   07H
  MOVWF   PORTE
  END

;(1)プロセッサの種別指定
;(2)インクルードファイルの指定
;
;(3)プログラムの開始番地の指定
;(4)Bank 1 へ切替
;(5)PortE 全ポートを出力に設定
;(6)Bank 0 へ戻す
;(7)00000111を Wreg にロードする
;(8)PORTEへWregのデータを出力
;(9)終了



<項目>RAポート:全LED点灯動作
RAポートの全LED点灯動作については、RBポートで使用したプログラムの一部を書き換えすることで対応できます。
ポートの設定では、
 CLRF   TRISB         ;(5)PortB 全ポートを出力に設定
となっていた箇所を
 CLRF   TRISA         ;(5)PortA 全ポートを出力に設定
として、RAポートに設定します。

また、出力データを
 MOVWF  PORTB        ;(8)PORTBへWregのデータを出力
となっていた箇所を
 MOVWF  PORTE        ;(8)PORTEへWregのデータを出力
とするだけです。

ただしREポートの数は、RA0〜RA5の6ポートのみです。
したがって、
 MOVLW  0FFH         ;(7)11111111を Wreg にロードする
となっていた箇所を
 MOVLW  3FH          ;(7)00111111を Wreg にロードする
と変更します。
(注)0FFHのままで変更しなくても、MPLABはエラーにはなりませんし、RA0〜5ピンのLEDが点灯します。

ここがポイントRA4ピンは、オープンドレイン出力です。!!
プルアップなどして外部で電圧を加える必要あり

RAポートの中でも、RA4ピンはオープンドレイン出力の特殊な回路になっています。したがって、RA4ピンを出力として使う場合には、プルアップするなど外部で電圧を加えてやる必要があるので、要注意です。もし、プルアップしないときは、図1のようにRA4ピンのLEDだけ点灯しません。

RA4ピンをプルアップしない場合
図1.RA4ピンをプルアップしない場合


図2に、RA4ピンにプルアップ抵抗をつけた例を示します。
(注)RA4ピンはオープンドレイン出力ですので、LEDを点灯させる本来の使い方としては、10kΩのプルアップ抵抗のところに、LEDを200Ω程度のプルアップ抵抗を介して+5V電源と直列に接続するようにします。ここでのPICターゲットボード内のLEDは、LEDを接続したことによるRA4ピンへの影響が出ないように、バッファ回路などが接続され、RA4ピンの電圧レベルをチェックする目的でつけられています。

RA4ピンにプルアップ抵抗をつけた回路例
図2.RA4ピンにプルアップ抵抗をつけた回路例

ターゲットボード上には、図3のように10ピンコネクタ・ケーブルを接続できるようにしています。ピンの内訳ですが、各ポートの8ピンと、GNDピン、+5Vピンで計10ピンとなっています。(ただし、RAポートは全6ピンですので、その他の2ピンはNCピンとしている。)
10ピンコネクタ・ケーブルですが、ターゲットボードとブレッドボード間を接続できるようにしています。図4は、ブレッドボード側でプルアップ抵抗を接続した例です。このように、ターゲットボード側の全ポートは、外部と自由に接続できるようになっていることと、ブレッドボードと組み合わせることにより、多目的な回路構成を実現することができます。

ターゲットボード側 ブレッドボード側
図3.ターゲットボード側 図4.ブレッドボード側



RAポート:全LED点灯動作プログラムについて

→ここをクリックして、下記のプログラムをダウンロードするようにしてください。
<ダウンロードする>  ファイル名:「port_a.asm」 サイズ623バイト

→ここをクリックして、下記のオブジェクトファイルをダウンロードするようにしてください。
<ダウンロードする>  ファイル名:「port_a.hex」 サイズ46バイト

;*****************************************************
; Port A動作チェックプログラム(1)
; Port Aの発光ダイオードを点灯させる
; 全ポートを出力させるためには、
; RA4ポートがプルアップされていること
;*****************************************************

  LIST    P=PIC16F877
  INCLUDE   P16F877.INC

  ORG    0
  BSF    STATUS,RP0
  CLRF   TRISA
  BCF    STATUS,RP0
  MOVLW   3FH
  MOVWF   PORTA
  END

;(1)プロセッサの種別指定
;(2)インクルードファイルの指定

;(3)プログラムの開始番地の指定
;(4)Bank 1 へ切替
;(5)PortA 全ポートを出力に設定
;(6)Bank 0 へ戻す
;(7)00111111を Wreg にロードする
;(8)PORTAへWregのデータを出力
;(9)終了

さて、RA4ピンにプルアップ抵抗を接続した場合ですが、上記のプログラムを動作させる前(イレースされている状態のPIC)で、図5のようにRA4ピンがすでに点灯してしまっています。RA4ピンを除くピンは、LED点灯のプログラムを動作させることで変化が分かりますが、RA4ピンについては、その変化が分かりません。したがって、次に別途プログラムを検討する必要があります。

PIC動作前 PIC動作中
図5.PIC動作前 図6.PIC動作中

次へは、LEDをON−OFFさせるLED点滅プログラムを使って、RA4ポートの動作チェックをします。



<戻る> <次ページへ>
<TOPページへ>



PC用眼鏡【管理人も使ってますがマジで疲れません】 解約手数料0円【あしたでんき】 Yahoo 楽天 NTT-X Store

無料ホームページ 無料のクレジットカード 海外格安航空券 ふるさと納税 海外旅行保険が無料! 海外ホテル